home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 1 / PC Actual CD 01.iso / f1 / mrboot.arj / MBRBOOT.BAS < prev    next >
Encoding:
BASIC Source File  |  1992-02-21  |  4.5 KB  |  136 lines

  1. DECLARE SUB AYUDA ()
  2. DECLARE SUB WRITESEC (UNIDAD%, CARA%)
  3. DECLARE SUB READSEC (UNIDAD%, CARA%)
  4. '
  5. ' ***************************************
  6. ' ***          MBRBOOT.BAS            ***
  7. ' *** (C)1992 GABRIEL MARTI I FUENTES ***
  8. ' ***************************************
  9. '
  10. ' Antes de compilar se debe cargar el Quick Basic
  11. ' de la siguiente manera:   QB /L
  12. ' para que carge la libreria QB.QLB
  13. '
  14. '$INCLUDE: 'QB.BI'
  15. '$DYNAMIC
  16.  
  17.   UNIDAD% = &H80          ' Unidad por defecto C:, si se desea que
  18.               ' funcione para la unidad D: debe cambiarse
  19.               ' el &H80 por &H81.
  20.  
  21.               ' VER PROCEDIMIENTOS READSEC / WRITESEC
  22.  
  23.   MBR% = 0                ' Cuando deseamos leer/escribir la MBR, el
  24.               ' valor del byte alto de DX debe ser 0.
  25.  
  26.   BOOT% = 1               ' Cuando deseamos leer/escribir el BOOT, el
  27.               ' valor del byte alto de DX debe ser 256.
  28.               ' El 1 es el factor multiplicador.
  29.  
  30. INICIO:
  31.   CLS
  32.   PRINT "┌─────────────────────────────────────────┐"
  33.   PRINT "│ Lectura / Escritura de la MBR y el BOOT │"
  34.   PRINT "├─────────────────────────────────────────┤"
  35.   PRINT "│ (c)Febrero 1992  Gabi Martí i Fuentes.  │"
  36.   PRINT "└─────────────────────────────────────────┘"
  37.   PRINT
  38.   IF INSTR(UCASE$(COMMAND$), "/L") > 0 THEN
  39.      CALL READSEC(UNIDAD%, MBR%)
  40.      CALL READSEC(UNIDAD%, BOOT%)
  41.      END
  42.   END IF
  43.   IF INSTR(UCASE$(COMMAND$), "/E") > 0 THEN
  44.      CALL WRITESEC(UNIDAD%, MBR%)
  45.      CALL WRITESEC(UNIDAD%, BOOT%)
  46.      END
  47.   END IF
  48.   CALL AYUDA
  49. END
  50.  
  51. REM $STATIC
  52. SUB AYUDA
  53.   PRINT "  ┌──────────────────────────────────────────────────────────────┐ "
  54.   PRINT "  │  FORMATO:     MBRBOOT [opcion]                               │ "
  55.   PRINT "  ├──────────────────────────────────────────────────────────────┤ "
  56.   PRINT "  │  OPCIONES:                                                   │ "
  57.   PRINT "  │               /L   Lee la MBR y el BOOT guardando la         │ "
  58.   PRINT "  │                    información en los ficheros con extensión │ "
  59.   PRINT "  │                    .MBR y .BOT respectivamente.              │ "
  60.   PRINT "  │                                                              │ "
  61.   PRINT "  │               /E   Escribe la información de los ficheros    │ "
  62.   PRINT "  │                    con extension .MBR y .BOT en el disco.    │ "
  63.   PRINT "  │──────────────────────────────────────────────────────────────│ "
  64.   PRINT "  │  Atención!!!  El nombre del fichero és siempre MBRBOOT.ext   │ "
  65.   PRINT "  └──────────────────────────────────────────────────────────────┘ "
  66. END SUB
  67.  
  68. SUB READSEC (UNIDAD%, CARA%)
  69.   DIM INREG AS RegTypeX             ' REGISTROS DE ENTRADA
  70.   DIM OUTREG AS RegTypeX            ' REGISTROS DE SALIDA
  71.   DIM SEC%(1 TO 512)                ' SECTOR
  72.  
  73.   INREG.ax = &H201                  ' FUNCION 2  - LECTURA DE 1 SECTOR
  74.   INREG.cx = &H1                    ' CILINDRO 0, SECTOR 1
  75.   INREG.dx = 256 * CARA% + UNIDAD%  ' CARA%, UNIDAD%
  76.   INREG.es = VARSEG(SEC%(1))        ' SEGMENTO DE DATOS
  77.   INREG.bx = VARPTR(SEC%(1))        ' OFFSET DE DATOS
  78.  
  79.   IF CARA% = 0 THEN
  80.      L$ = "(MBR)": FICH$ = "MBRBOOT.MBR"
  81.   ELSE
  82.      L$ = "(BOOT)": FICH$ = "MBRBOOT.BOT"
  83.   END IF
  84.  
  85.   PRINT " Leyendo "; L$; " de Unidad "; HEX$(UNIDAD%); " ...";
  86.   CALL INTERRUPTX(&H13, INREG, OUTREG)
  87.  
  88.   PRINT " Guardando "; L$; " en fichero "; FICH$; " ..."; CHR$(7);
  89.   OPEN FICH$ FOR RANDOM AS #1 LEN = 2
  90.   FIELD #1, 2 AS BYTE2$
  91.   FOR I% = 1 TO 512
  92.      LSET BYTE2$ = MKI$(SEC%(I%))
  93.      PUT #1, I%
  94.   NEXT I%
  95.   CLOSE #1
  96.  
  97. END SUB
  98.  
  99. SUB WRITESEC (UNIDAD%, CARA%)
  100.   DIM INREG AS RegTypeX               ' REGISTROS DE ENTRADA
  101.   DIM OUTREG AS RegTypeX              ' REGISTROS DE SALIDA
  102.   DIM SEC%(1 TO 512)                  ' SECTOR
  103.  
  104.   INREG.ax = &H301                    ' FUNCION 3  - ESCRITURA DE 1 SECTOR
  105.   INREG.cx = &H1                      ' CILINDRO 0, SECTOR 1
  106.   INREG.dx = 256 * CARA% + UNIDAD%    ' CARA%, UNIDAD%
  107.   INREG.es = VARSEG(SEC%(1))          ' SEGMENTO DE DATOS
  108.   INREG.bx = VARPTR(SEC%(1))          ' OFFSET DE DATOS
  109.  
  110.   IF CARA% = 0 THEN
  111.      L$ = "(MBR)": FICH$ = "MBRBOOT.MBR"
  112.   ELSE
  113.      L$ = "(BOOT)": FICH$ = "MBRBOOT.BOT"
  114.   END IF
  115.  
  116.   PRINT " Leyendo "; L$; " del fichero "; FICH$; " ...";
  117.   OPEN FICH$ FOR RANDOM AS #1 LEN = 2
  118.   FIELD #1, 2 AS BYTE2$
  119.   IF LOF(1) = 0 THEN
  120.      PRINT " Error: Fichero "; FICH$; " inexistente."
  121.      CLOSE #1
  122.      KILL FICH$
  123.      EXIT SUB
  124.   END IF
  125.   FOR I% = 1 TO 512
  126.      GET #1, I%
  127.      SEC%(I%) = CVI(BYTE2$)
  128.   NEXT I%
  129.   CLOSE #1
  130.  
  131.   PRINT " Escribiendo "; L$; " en Unidad "; HEX$(UNIDAD%); " ..."; CHR$(7);
  132.   CALL INTERRUPTX(&H13, INREG, OUTREG)
  133.  
  134. END SUB
  135.  
  136.